package com.app.newiptv.utils.greendao;

import android.content.Context;
import android.text.TextUtils;
import android.util.Log;

import com.app.newiptv.base.MyApplication;
import com.app.newiptv.bean.greendao.ProgramDB;
import com.app.newiptv.bean.greendao.SitcomListGen;
import com.app.newiptv.gen.ProgramDBDao;
import com.app.newiptv.gen.SitcomListGenDao;

import java.util.List;


/**
 * Created by Shinelon on 2017/9/11.
 */

public class DbService {

    private static final String TAG = DbService.class.getSimpleName();
    private static DbService instance;
    private static Context appContext;
    private com.app.newiptv.gen.DaoSession mDaoSession;
    private com.app.newiptv.gen.SitcomListGenDao sitcomListGen;
    private ProgramDBDao programDBDao;


    private DbService() {
    }

    /**
     * 采用单例模式
     *
     * @param context 上下文
     * @return dbservice
     */
    public static DbService getInstance() {
        if (instance == null) {
            instance = new DbService();
            if (appContext == null) {
                appContext = MyApplication.mApp;
            }
            instance.mDaoSession = GreenDaoManager.getInstance().getSession();
            instance.sitcomListGen = GreenDaoManager.getInstance().getNewSession().getSitcomListGenDao();
            instance.programDBDao = GreenDaoManager.getInstance().getNewSession().getProgramDBDao();
        }
        return instance;
    }

    /**
     * 根据用户id,取出用户信息
     *
     * @param id 用户id
     * @return 用户信息
     */
    public SitcomListGen loadNote(long id) {
        if (!TextUtils.isEmpty(id + "")) {
            return sitcomListGen.load(id);
        }
        return null;
    }

    public SitcomListGen loadData(int id) {
        SitcomListGen user = sitcomListGen.queryBuilder().where(SitcomListGenDao.Properties.SitcomId.eq(id)).build().unique();
        return user;
    }

    /**
     * 取出所有数据
     *
     * @return 所有数据信息
     */
    public List<SitcomListGen> loadAllNote() {
        return sitcomListGen.loadAll();
    }


    /**
     * 取出所有数据
     *
     * @return 所有数据信息
     */
    public List<ProgramDB> loadProgramAllNote() {
        return programDBDao.loadAll();
    }
    /**
     * 根据查询条件,返回数据列表
     *
     * @param where  条件
     * @param params 参数
     * @return 数据列表
     */
    public List<SitcomListGen> queryNote(String where, String... params) {
        return sitcomListGen.queryRaw(where, params);
    }

    /**
     * 根据用户信息,插件或修改信息
     *
     * @param user 用户信息
     * @return 插件或修改的用户id
     */
    public long saveProgramNote(ProgramDB programDB) {
        return programDBDao.insertOrReplace(programDB);
    }

    /**
     * 根据用户信息,插件或修改信息
     *
     * @param user 用户信息
     * @return 插件或修改的用户id
     */
    public long saveNote(SitcomListGen user) {
        return sitcomListGen.insertOrReplace(user);
    }


    /**
     * 批量插入或修改用户信息
     *
     * @param list 用户信息列表
     */
    public void saveNoteLists(final List<SitcomListGen> list) {
        if (list == null || list.isEmpty()) {
            return;
        }
        sitcomListGen.getSession().runInTx(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < list.size(); i++) {
                    SitcomListGen user = list.get(i);
                    sitcomListGen.insertOrReplace(user);
                }
            }
        });

    }

    /**
     * 删除所有数据
     */
    public void deleteAllNote() {
        sitcomListGen.deleteAll();
    }

    /**
     * 根据id,删除数据
     *
     * @param id 用户id
     */
    public void deleteNote(long id) {
        sitcomListGen.deleteByKey(id);
        Log.i(TAG, "delete");
    }
    /**
     * 删除所有数据
     */
    public void deleteProgramAllNote() {
        programDBDao.deleteAll();
    }
    /**
     * 根据用户类,删除信息
     *
     * @param user 用户信息类
     */
    public void deleteNote(SitcomListGen user) {
        sitcomListGen.delete(user);
    }
}
